package com.itany.corejava.code07_面向对象;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年11月01日 13:34
 */
public class Test11_构造方法 {
    public static void main(String[] args) {

        // 当使用关键字new 创建对象时, 本质上就是调用了对应类的构造方法
        // User user=new User();
        // System.out.println("id:"+user.id+",username:"+user.username+",password:"+user.password);

        // User user=new User(20);
        // System.out.println("id:"+user.id+",username:"+user.username+",password:"+user.password);

        // User user=new User("alice","123456");
        // System.out.println("id:"+user.id+",username:"+user.username+",password:"+user.password);

        User user=new User(1,"lucy","123456");
        System.out.println("id:"+user.id+",username:"+user.username+",password:"+user.password);
    }
}
class User{
    int id;
    String username;
    String password;


    //当没有为类定义构造方法时, 每一个类默认均存在一个无参的构造方法
    public User(){
        System.out.println("调用无参的构造方法");
    }

    // 当为类定义了构造方法后, 将不存在默认的无参构造方法,此时如果需要无参的构造方法，则可以手动定义一个无参构造方法

    public User(int id){
        System.out.println("----调用了有id参数的构造方法----");
        this.id=id;
    }
    public User(String username,String password){
        System.out.println("----调用了有username和password参数的构造方法----");
        this.username=username;
        this.password=password;
    }
    public User(int id,String username,String password){
        // this.id=id;//当前new出来实例对象
        // this.username=username;
        // this.password=password;

        // this(参数);//就表示调用当前类的构造方法，只能处于构造方法的第一行，且一个构造方法只能调用一次
        // this(id);
        // this.username=username;
        // this.password=password;

        this(username,password);
        this.id=id;


    }

}